package cn.walls1717.juc.objhead;

import lombok.extern.slf4j.Slf4j;
import org.openjdk.jol.info.ClassLayout;

/**
 * JOL可视化对象内存结构 <br>
 *
 * gc年龄采用4位bit存储，最大值为15，-XX:MaxTenuringThreshold参数默认值就是15，范围必须在0-15，如果将此参数设置大于15则jvm无法正常启动。 <br>
 *
 * 通过java -XX:+PrintCommandLineFlags -version命令可以查看jvm启动时的默认参数，可以发现-XX:+UseCompressedClassPointers
 * 表示默认开启了指针压缩，所以类型指针变为了4字节，如果关闭了指针压缩，那么就恢复到了对象头占16字节，对象头中对象标记8字节，类型指针8字节。 <br>
 *
 * @author walls1717
 * @create 2022/12/15 13:35
 **/
@Slf4j
public class JOLDemo {

    public static void main(String[] args) {
        // log.info(VM.current().details());

        Object o = new Object();
        System.out.println(ClassLayout.parseInstance(o).toPrintable());

        Customer customer = new Customer();
        // System.out.println(ClassLayout.parseInstance(customer).toPrintable());
    }
}

class Customer {
    int id;
    boolean flag = false;
}
